/**
 * Created by Administrator on 2015/6/3.
 */
/*
* 可以用readfile读取文件
* encoding:设置编码
* flag
*   r read 读取文件
*   w write 写会覆盖以前的内容
*   a append 追加
*   callback 打开之后的回调函数
*       err 错误对象，读取错误时触发的对象
*       open 返回的一定是最小未用的索引
*       0 stdin 标准输入
*       1 stdout 标准输出
*       2 conslog.error 错误输出
*       3 fd 打开文件后获取的文件描述符（整数值 打开文件的索引）
*         文件的描述符，相当于文件的指针，通过操作指针就可以操作文件了。
*
* */
/*
var fs =require('fs');
fs.open('./ygl.txt','r',function(err,fd){
    console.log(fd);
});
*/



/* 通过fd操作文件中的数据 */
/* fs.read读取文件 ——参数
*   fd         open方法 返回得到的文件描述符
*   buffer     要读到那个缓冲区内
*   offset     向"缓冲区"中写入的数据的起始位置
*
*   length     从文件中读取到的字节
*   position   文件中读取的开始位置
*
*   callback    回调函数的参数
*       err         错误对象
*       bytesRead   实际读取到的字节数(真实读取到数据和上面提到的length不一定相等)
*       bytesRead   在回调函数中获取 真实返回的字节数
*       buffer      和上面的buffer是一样的，读取到的缓冲区对象
*                   保留buffer的引用，避免被垃圾回收器收回
*                   垃圾回收器的原理是标记一个对象是否活跃，有没有活动的引用能指向他。
*                   否则垃圾回收器认为该对象已经死掉了，并且将该对象进行回收。
                    相反如果有人调用执行，就说明有人还在用该对象。
                    为了防止buffer被回收，就在回调函数中进行了引用。防止还没读buff中的数据就被垃圾回收器收回。
                    buffer同时指向了buff对象。
*       VM工作原理，内存收集和内存泄露分析：
*
* */
/*var fs=require('fs');
fs.open('./ygl.txt','r',function(err,fd){
    var buff=new Buffer(6);
    fs.read(fd,buff,0,6,3,function(err,bytesRead,buffer){
        console.log(bytesRead);//实际读取到的字节数
        console.log(buff);//放在缓冲区中的内容
        console.log(buff.toString());
        console.log(buff===buffer);
    });
});*/

/*多次读取文件中的数据*/
var fs=require('fs');

fs.open('../test.js','r',function(err,fd){
    var buff=new Buffer(3);
    fs.read(fd,buff,0,3,0,function(err,bytesRead,buffer){
        fs.read(fd,buff,0,0,null,function(err,bytesRead,buffer){
            console.log(buff.toString());

        });
    });
});



/*同步读取文件*/
/*function readText(pathname) {
    var bin = fs.readFileSync(pathname);

    if (bin[0] === 0xEF && bin[1] === 0xBB && bin[2] === 0xBF) {
        bin = bin.slice(3);
    }

    return bin.toString('utf-8');
}
console.log(readText('./ygl.txt'));*/

/*同步读取文件方法2*/
fs.open('./ygl.txt','r',function(err,fd){
    if(err){
        console.error(err);
    }else{
        var buff=new Buffer(255);
        //在同步方法中没有回调函数，只有返回值
        var bytesRead=fs.readSync(fd,buff,0,6,0);
        //console.log('实际读取到的字节数 '+bytesRead);
        console.log(buff.slice(0,bytesRead).toString());
    }
});






















































